// pages/home/blog/blog.js
const app = getApp()
const appId = app.globalData.AppId;
const appSecret = app.globalData.AppSecret;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    blogList: [],
    // 随机数
    randomNum: 0,
    // 动画时间
    animationTime: 1,
    // 瀑布流色块
    colourList: [{
      colour: 'bg-red'
    }, {
      colour: 'bg-orange'
    }, {
      colour: 'bg-yellow'
    }, {
      colour: 'bg-olive'
    }, {
      colour: 'bg-green'
    }, {
      colour: 'bg-cyan'
    }, {
      colour: 'bg-blue'
    }, {
      colour: 'bg-purple'
    }, {
      colour: 'bg-mauve'
    }, {
      colour: 'bg-pink'
    }, {
      colour: 'bg-lightBlue'
    }]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      skin: app.globalData.skin
    });
    // this.getWechatAccessToken();
    this.getBlogList()
  },
  getWechatAccessToken(){
    let timestamp = Date.parse(new Date());
    let expiration = wx.getStorageSync("AccessTokenExpiration");
    if(expiration > timestamp && wx.getStorageSync("blogList")){
      console.log("AccessToken未过期可以继续使用~");
      // 查询文章列表
      if(this.data.blogList.length == 0){
        this.getContentList();
      }
      return;
    }
    wx.request({
      url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`, 
      data: {},
      method: "GET",
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        console.log("获取公众号AccessToken回调：",res)
        // 有效期两小时，1分钟=60000ms
        let expiration = Date.parse(new Date()) + (110 * 60000)
        // wx.setStorageSync('AccessToken', res.data.access_token) //同步缓存
        //异步不会阻塞当前任务
        wx.setStorage({
          data: expiration,
          key: 'AccessTokenExpiration'
        })
        wx.setStorage({
          data: res.data.access_token,
          key: 'AccessToken'
        });
        // 查询文章列表
        if(this.data.blogList.length == 0){
          this.getContentList();
        }
      },
      fail: (error) => {
        console.log("获取公众号AccessToken失败：",error);
        wx.showToast({
          title: 'AccessToken失败',
          icon: 'none',
          duration: 2000, //单位ms，默认1500
          mask: true
        });
      }
    })
  },
  // 获取公众号文章列表
  getContentList(){
    var blogData = wx.getStorageSync("blogList") //这里必须使用同步获取
    if(blogData){
      console.log("缓存中有数据拿缓存的数据，不请求~");
      this.setData({ blogList: blogData });
      return;
    }
    this.setData({showLoading: true});
    let AccessToken = wx.getStorageSync("AccessToken");
    wx.request({
      url: `https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=${AccessToken}`, 
      data: {
        type: 'news',
        offset: 0,
        count: 15
      },
      method: "POST",
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        console.log("获取公众号文章列表回调：",res);
        this.loadModal()
        this.setData({
          blogList: res.data.item
        });
        app.globalData.total = res.data.total_count
        //异步不会阻塞当前任务
        wx.setStorage({
          data: res.data.item,
          key: 'blogList'
        })
      },
      fail: (error) => {
        console.log("获取公众号文章列表失败：",error);
        this.setData({ showLoading: false });
        wx.showToast({
          title: '查询失败',
          icon: 'none',
          duration: 2000, //单位ms，默认1500
          mask: true
        });
      }
    })
  },

  /**
   * 监听屏幕上下滚动
   */
  onPageScroll(event) {
    // console.log("屏幕滚动：", event)
    this.setData({
      scrollTop: event.detail.scrollTop = undefined ? event.scrollTop:event.detail.scrollTop
    })
  },
  /**
   * 下拉触底加载更多
   */
  loadMore() {
    // console.log("触发底部");
    // this.setData({showLoading: true});
    this.getBlogList()
  },
  /**
   * 调用云函数查询文章列表
   */
  getBlogList() {
    let timestamp = Date.parse(new Date());
    let expiration = wx.getStorageSync("blogDataExpiration");
    let blogData = wx.getStorageSync("blogList")
    /*
    if(expiration > timestamp && blogData){
      console.log("blogData数据未过期继续使用缓存数据~");
      this.setData({ blogList: blogData });
      return;
    }*/
    if(this.data.blogList.length == app.globalData.total){
      wx.showToast({
        title: '没有更多数据了o((>ω< ))o',
        icon: 'none',
        duration: 2000, //单位ms，默认1500
        mask: true
      });
      return;
    }
    this.setData({showLoading: true});
    wx.cloud.callFunction({
      name: "query",
      data: {
        dbName: "t_wx-blog",
        startIndex: this.data.blogList.length,
        // 查询条件
        filter: {},
      },
      success: (res) => {
        this.loadModal()
        console.log("查询文章列表回调：", res)
        this.setData({
          // concat：合并两个数组
          blogList: this.data.blogList.concat(res.result.data)
        });
        // 放入缓存（小程序可直接存取，不用转换）
        // wx.setStorageSync('blogList', JSON.stringify(res.result.data)) 
        // 拿：JSON.parse(wx.getStorageSync("blogList"))
        // wx.setStorageSync('blogList', res.result.data)
        //异步不会阻塞当前任务
        wx.setStorage({
          data: res.result.data,
          key: 'blogList'
        })
        // 有效期两小时，1分钟=60000ms
        let expiration = Date.parse(new Date()) + (2 * 60 * 60000)
        wx.setStorage({
          data: expiration,
          key: 'blogDataExpiration'
        })
        app.globalData.total = res.result.count.total
      },
      fail: (error) => {
        // console.log("查询文章列表失败：", error);
        this.setData({ showLoading: false });
        wx.showToast({
          title: '查询失败',
          icon: 'none',
          duration: 2000, //单位ms，默认1500
          mask: true
        });
      }
    })
  },
  /**
   * loading加载2s后关闭
   */
  loadModal() {
    this.setData({ showLoading: true });
    setTimeout(() => {
      this.setData({
        showLoading: false
      })
    }, 2000)
  },
  // 跳转到blog详情页
  toBlogDetail(e){
    console.log("跳转到blog详情页 params：",e);
    let blogUrl = e.currentTarget.dataset.url
    // blogData = blogData.replaceAll('?','%3F').replaceAll('=','%3D').replaceAll('&','%26')
    blogUrl = encodeURIComponent(blogUrl)
    wx.navigateTo({
      url: `./detail/detail?blogUrl=${blogUrl}`,
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})